#include <stdio.h>

int my_add(int x, int y){
	return x + y;
}

int my_sub(int x, int y){
	return x - y;
}

int main(int argc, const char *argv[])
{
	// 定义了一个函数指针数组 数组中有2个元素
	// 每个元素都是一个 能指向 返回值为 int 形参为 (int, int)的函数的函数指针
	int (*s[2])(int, int) = {my_add, my_sub};

	// 定义一个函数指针数组指针 指向 函数指针数组 有两种写法
	// 方式1：强调 指向 函数指针数组 的指针
	int (*(*p))(int, int) = s;
	// 指针 p 保存了数组 s 的首地址后 通过 p 也可以访问数组元素了
	printf("%d\n", p[0](10, 20)); // 30
	printf("%d\n", p[1](10, 20)); // -10

	// 方式2：强调  函数指针 数组指针
	int (*(*q)[2])(int, int) = &s;
	printf("%d\n", q[0][0](10, 20)); // 30
	printf("%d\n", q[0][1](10, 20)); // -10

	return 0;
}
